home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 … to May: Technology Seed / April-May ADC Seed.toast / ASIP 6.0 Seed 3 package / Install AppleShare IP 6.0 / Web Admin / Java / DES.class / DES.class (.txt)
Encoding:
Java Class File  |  1998-04-17  |  3.2 KB  |  243 lines  |  [Clss/MWZP]

  1. public class DES extends DESPriv implements Cryptor {
  2.    private boolean _blockMode;
  3.    private byte[] lastBlock = new byte[8];
  4.    public static final int DES_BLOCK_SIZE = 8;
  5.    public static final int DES_KEY_SIZE = 8;
  6.  
  7.    public DES(byte[] var1, boolean var2) throws IllegalArgumentException {
  8.       super(0);
  9.       this.setState(var1, var2);
  10.    }
  11.  
  12.    public DES() {
  13.       super(0);
  14.    }
  15.  
  16.    public void setState(byte[] var1, boolean var2) throws IllegalArgumentException {
  17.       if (var1.length < 8) {
  18.          throw new IllegalArgumentException("Bad DES key length");
  19.       } else {
  20.          this._blockMode = var2;
  21.          byte[] var3 = new byte[8];
  22.  
  23.          for(byte var4 = 0; var4 < 8; ++var4) {
  24.             this.lastBlock[var4] = 0;
  25.             var3[var4] = var1[var4];
  26.          }
  27.  
  28.          for(byte var7 = 0; var7 < 8; ++var7) {
  29.             int var6 = 0;
  30.  
  31.             for(int var5 = 0; var5 < 7; ++var5) {
  32.                if ((var3[var7] & 1 << var5) != 0) {
  33.                   ++var6;
  34.                }
  35.             }
  36.  
  37.             if ((var6 & 1) == 0) {
  38.                var3[var7] |= -128;
  39.             } else {
  40.                var3[var7] = (byte)(var3[var7] & 127);
  41.             }
  42.          }
  43.  
  44.          super.setkey(var3);
  45.       }
  46.    }
  47.  
  48.    public int encryptBlock(byte[] var1, int var2, int var3, byte[] var4, int var5, boolean var6) throws IllegalArgumentException {
  49.       byte[] var7 = new byte[8];
  50.       if (var3 > 8) {
  51.          throw new IllegalArgumentException("DES Block Size Exceeded");
  52.       } else {
  53.          if (var3 != 0) {
  54.             StringUtils.bcopy(var1, var2, var7, 0, var3);
  55.          }
  56.  
  57.          if (var3 < 8) {
  58.             if (!var6) {
  59.                throw new IllegalArgumentException("unaligned DES block");
  60.             }
  61.  
  62.             var7[7] = (byte)var3;
  63.          }
  64.  
  65.          if (!this._blockMode) {
  66.             for(int var9 = 0; var9 < 8; ++var9) {
  67.                var7[var9] ^= this.lastBlock[var9];
  68.             }
  69.          }
  70.  
  71.          super.endes(var7);
  72.          if (!this._blockMode) {
  73.             StringUtils.bcopy(var7, this.lastBlock, 8);
  74.          }
  75.  
  76.          int var8 = 8;
  77.          StringUtils.bcopy(var7, 0, var4, var5, 8);
  78.          if (var6) {
  79.             if (var3 == 8) {
  80.                int var10 = this.encryptBlock((byte[])null, 0, 0, var4, var5 + 8, true);
  81.                var8 += var10;
  82.             }
  83.  
  84.             if (var3 != 0) {
  85.                StringUtils.bzero(this.lastBlock, 0, 8);
  86.             }
  87.          }
  88.  
  89.          return var8;
  90.       }
  91.    }
  92.  
  93.    public int decryptBlock(byte[] var1, int var2, byte[] var3, int var4, boolean var5) throws IllegalArgumentException {
  94.       byte[] var6 = new byte[8];
  95.       byte[] var7 = new byte[8];
  96.       if (var1.length - var2 < 8) {
  97.          throw new IllegalArgumentException("Insufficient cipherText");
  98.       } else {
  99.          StringUtils.bcopy(var1, var2, var6, 0, 8);
  100.          if (!this._blockMode && !var5) {
  101.             StringUtils.bcopy(var1, var2, var7, 0, 8);
  102.          }
  103.  
  104.          super.dedes(var6);
  105.          if (!this._blockMode) {
  106.             for(int var9 = 0; var9 < 8; ++var9) {
  107.                var6[var9] ^= this.lastBlock[var9];
  108.             }
  109.  
  110.             if (!var5) {
  111.                StringUtils.bcopy(var7, this.lastBlock, 8);
  112.             }
  113.          }
  114.  
  115.          byte var8;
  116.          if (var5) {
  117.             byte var10 = var6[7];
  118.             if (var10 > 7) {
  119.                throw new IllegalArgumentException("Bad cipherText");
  120.             }
  121.  
  122.             var8 = var10;
  123.             StringUtils.bzero(this.lastBlock, 0, 8);
  124.          } else {
  125.             var8 = 8;
  126.          }
  127.  
  128.          if (var8 != 0) {
  129.             StringUtils.bcopy(var6, 0, var3, var4, var8);
  130.          }
  131.  
  132.          return var8;
  133.       }
  134.    }
  135.  
  136.    public int plainBlockSize() {
  137.       return 8;
  138.    }
  139.  
  140.    public int cipherBlockSize() {
  141.       return 8;
  142.    }
  143.  
  144.    public int cipherTextSize(int var1) {
  145.       int var2 = (var1 + 8 - 1) / 8;
  146.       return var2 * 8;
  147.    }
  148.  
  149.    public byte[] encrypt(byte[] var1) throws IllegalArgumentException, Exception {
  150.       int var2 = 0;
  151.       int var7 = 0;
  152.       if (var1.length == 0) {
  153.          throw new IllegalArgumentException("NULL Plaintext");
  154.       } else {
  155.          int var8 = var1.length + 8 & -8;
  156.          byte[] var6 = new byte[var8];
  157.          int var3 = var1.length;
  158.  
  159.          while(true) {
  160.             int var4;
  161.             boolean var9;
  162.             if (var3 <= 8) {
  163.                var9 = true;
  164.                var4 = var3;
  165.             } else {
  166.                var9 = false;
  167.                var4 = 8;
  168.             }
  169.  
  170.             int var5 = this.encryptBlock(var1, var2, var4, var6, var7, var9);
  171.             if (var5 == 0) {
  172.                throw new Exception("NULL Ciphertext (Internal Error)");
  173.             }
  174.  
  175.             if (var7 + var5 > var8) {
  176.                throw new Exception("NULL Ciphertext (Internal Error)");
  177.             }
  178.  
  179.             if (var9) {
  180.                return var6;
  181.             }
  182.  
  183.             var7 += var5;
  184.             var2 += var4;
  185.             var3 -= var4;
  186.          }
  187.       }
  188.    }
  189.  
  190.    public byte[] decrypt(byte[] var1) throws IllegalArgumentException, Exception {
  191.       int var2 = 0;
  192.       int var6 = 0;
  193.       int var3 = var1.length;
  194.       if (var3 % 8 != 0) {
  195.          throw new IllegalArgumentException("Unaligned Ciphertext");
  196.       } else if (var3 == 0) {
  197.          throw new IllegalArgumentException("NULL Ciphertext");
  198.       } else {
  199.          byte[] var4;
  200.          for(var4 = new byte[var3]; var3 != 0; var3 -= 8) {
  201.             boolean var7;
  202.             if (var3 == 8) {
  203.                var7 = true;
  204.             } else {
  205.                var7 = false;
  206.             }
  207.  
  208.             int var5 = this.decryptBlock(var1, var2, var4, var6, var7);
  209.             if (var5 == 0) {
  210.                if (!var7) {
  211.                   throw new Exception("Internal Decrypt Sync Error");
  212.                }
  213.                break;
  214.             }
  215.  
  216.             var6 += var5;
  217.             var2 += 8;
  218.          }
  219.  
  220.          if (var6 != var4.length) {
  221.             byte[] var8 = new byte[var6];
  222.             StringUtils.bcopy(var4, var8, var6);
  223.             return var8;
  224.          } else {
  225.             return var4;
  226.          }
  227.       }
  228.    }
  229.  
  230.    public String dump(byte[] var1, int var2) {
  231.       StringBuffer var3 = new StringBuffer(var2 * 2);
  232.  
  233.       for(int var4 = 0; var4 < var2; ++var4) {
  234.          byte var5 = (byte)(var1[var4] >> 4 & 15);
  235.          var3.append((char)(var5 + (var5 < 10 ? 48 : 55)));
  236.          var5 = (byte)(var1[var4] & 15);
  237.          var3.append((char)(var5 + (var5 < 10 ? 48 : 55)));
  238.       }
  239.  
  240.       return new String(var3);
  241.    }
  242. }
  243.